<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Request;

class Role extends Admin
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        // 查询role表
        $data = Db::name('role_node')
            ->alias('rn')
            ->join('role r','r.id=rn.rid')
            ->join('node n','n.id=rn.nid')
            ->field(['r.id'=>'id','r.name'=>'name','r.remark'=>'remark','r.status'=>'status',"group_concat(n.name)"=>'nname'])
            ->group('r.id')
            ->paginate(4);
        // 分页
        $page = $data->render();
        $this->assign('data', $data);
        $this->assign('page', $page);
        return $this->fetch('role/index');
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        return view('role/create');
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = $request->post();

        $sw = null;
        // 启动事务
        Db::startTrans();
        try{
            // 数据验证
                $rid = Db::name('role')
                    ->insertGetId($data);
                // 默认角色员工
                $nid = Db::name('node')
                    ->field('id')
                    ->where('name','浏览首页')
                    ->find();
                // 生成数组
                $arr['rid'] = intval($rid);
                $arr['nid'] = $nid['id'];
                Db::name('role_node')
                        ->data($arr)
                        ->insert();

                // 提交事务
                Db::commit();
                $sw = true;
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            return $this->error('添加失败,请重新添加...');
        }
        if ($sw) {
            return $this->success('添加成功!',url('admin/role/index'));
        }
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        $data = Db::name('role')
            ->field(true)
            ->find($id);
        return view('',[
            'data'=>$data
        ]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        $put = $request->put();
        unset($put['_method']);
        // 更新
        $res = Db::name('role')
            ->where('id',$id)
            ->data($put)
            ->update();
        if ($res) {
            return $this->success('修改成功!',url('admin/role/index'));
        } else {
            return $this->error('修改失败,请重新修改!');
        }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        $data['status'] = true;
        // 执行删除
        Db::startTrans();
        try {
            Db::name('role')
                ->delete($id);

            Db::name('role_node')
                ->where('rid', $id)
                ->delete();

            Db::name('user_role')
                ->where('rid',$id)
                ->delete();
            // 提交事务
            Db::commit();
            return json($data);
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $data['status'] = false;
            return json($data);
        }
    }

    // 分配角色
    public function node($id)
    {
        // 查询权限表和角色权限表和角色表
        $sql = "select n.id from QBQ_role r,QBQ_node n,QBQ_role_node rn where r.id=rn.rid and n.id=rn.nid and rn.rid=".$id;
        $nid = Db::query($sql);
        $arr = array_column($nid, 'id');

        $data = Db::name('node')
            ->field(['id','name'])
            ->order('id', 'asc')
            ->select();
        return view('role/node', [
            'nid'=>$arr,
            'rid'=>$id,
            'data'=>$data
        ]);
    }

    public function doNode(Request $request)
    {
//        插入角色权限表
        $data = $request->post();
        $rid = intval($data['rid']);
        $nids = $data['nid'];

        $sw = null;
        Db::startTrans();
        try{
            // 删除原来数据
            $res = Db::name('role_node')
                ->where('rid',$rid)
                ->delete();
            // 更新数据
            foreach($nids as $v) {
                // 生成数组
                $arr['nid'] = $v;
                $arr['rid'] = $rid;
                $res1 = Db::name('role_node')
                    ->insert($arr);
            }
            // 提交事务
            Db::commit();
            $sw = true;
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $this->error('分配失败,请重新选择');
        }

        if ($sw) {
            $this->success('分配成功',url('admin/role/index'));
        }
    }

    // 修改状态
    public function doStatus($id)
    {
        $res = Db::name('role')
            ->field('status')
            ->find($id);
        if ($res['status'] == 1) {
            $arr = ['status'=>0];
            $data = Db::name('role')
                ->where('id',$id)
                ->update($arr);
            if ($data) {
                return json($arr);
            }
        } else {
            $arr = ['status'=>1];
            $data = Db::name('role')
                ->where('id',$id)
                ->update($arr);
            if ($data) {
                return json($arr);
            }
        }
    }

    // 搜索
    public function doSearch(Request $request)
    {
        // 查询user表
        $input = $request->post()['search'];
        if ($input == '禁用') {
            $input = '0';
        } elseif ($input == '启用') {
            $input = '1';
        }
//        var_dump($input);die;
        // 查询role表
        $data = Db::name('role_node')
            ->alias('rn')
            ->join('role r','r.id=rn.rid')
            ->join('node n','n.id=rn.nid')
            ->field(['r.id'=>'id','r.name'=>'name','r.remark'=>'remark','r.status'=>'status',"group_concat(n.name)"=>'nname'])
            ->whereOr('r.name','like','%'.$input.'%')
            ->whereOr('n.name','like','%'.$input.'%')
            ->whereOr('r.status','like','%'.$input.'%')
            ->group('r.id')
            ->paginate(4);


        if (!$data) {
            $data = null;
            return view('user/index',[
                'data'=>$data,
                'page'=>''
            ]);
        } else {
            // 分页
            $page = $data->render();
//            var_dump($page);die;
            $this->assign('data', $data);
            $this->assign('page', $page);
            return $this->fetch('role/index');
        }
    }
}
